Analyze the Facts. Speak the Truth.
American Discourse News
Independent Research  ✦  Unfiltered Commentary  ✦  Real American Stories
Breaking
Federal Reserve holds rates steady amid inflation concerns Community banks see record deposits as Americans go local Megabank consolidation reaches 40-year high, new report finds Local business coalitions launch across 12 states Credit union membership surges 18% year over year Federal Reserve holds rates steady amid inflation concerns Community banks see record deposits as Americans go local Megabank consolidation reaches 40-year high, new report finds Local business coalitions launch across 12 states Credit union membership surges 18% year over year
The time is now

Change the Trajectory of Our Nation

Corporate power only wins when Americans stay divided, distracted, and disengaged. Here's how you fight back — starting today, starting local.

Support Local

Your dollar is your most powerful vote.

Six banks control over half of America's deposits. Every time you bank local, shop local, and eat local — you pull money out of that system. $68 of every $100 spent locally stays in your community vs. $43 at a national chain.

Vote American

Know who funds your politicians before you vote.

PACs spent over $14 billion in the 2024 cycle. Foreign-interest lobbies, Wall Street, and Big Pharma select your politicians before ballots are even printed. The antidote is information — know your candidates, know their donors, know their record.

Your community, right now
Local news · Events · Elections · Businesses
Location is used only to load your feed — never stored, never shared, gone when you close the tab.
Loading latest video and generating summary...
✦ ✦ ✦
Loading posts from @AmericanDisNews...
Follow Along

Real-time takes, breaking analysis, and unfiltered truth.

Every post on X is live commentary as the news breaks. Follow along and join the conversation — this is where the discourse happens first.

Follow @AmericanDisNews → ☕ Buy Us a Coffee
Our Mission

Hold Power Accountable

American Discourse News exists to cut through the noise and ask the questions that corporate media won't. Who controls your money? Who controls your information? Who profits when Americans stay divided?

Read Our Mission →
Take Action

Support Local America

The most powerful vote you cast isn't at the ballot box — it's with your wallet. Switch to a credit union. Shop local. Bank local. Keep American money in American communities.

Find Local Resources →
const PROXY = 'https://api.allorigins.win/get?url='; async function buildEditorial() { const el = document.getElementById('editorial-section'); try { // 1. Fetch RSS feed const rssUrl = 'https://www.youtube.com/feeds/videos.xml?channel_id=' + CHANNEL_ID; const res = await fetch(PROXY + encodeURIComponent(rssUrl)); const data = await res.json(); const xml = new DOMParser().parseFromString(data.contents, 'text/xml'); const entry = xml.querySelector('entry'); if (!entry) throw new Error('No video found'); const videoId = entry.querySelector('videoId')?.textContent || ''; const title = entry.querySelector('title')?.textContent || 'Latest Video'; const link = entry.querySelector('link')?.getAttribute('href') || '#'; const published = entry.querySelector('published')?.textContent || ''; const desc = entry.querySelector('description')?.textContent?.replace(/<[^>]+>/g,'').slice(0,600) || ''; const dateStr = published ? new Date(published).toLocaleDateString('en-US',{weekday:'long',month:'long',day:'numeric',year:'numeric'}) : ''; const thumb = `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`; // 2. Show video immediately while AI generates el.innerHTML = `
${title}
✦ Latest Video
${title}
${dateStr}
Watch on YouTube
AI is reading your latest video and writing a summary...
See All Videos on YouTube
`; // 3. Call Claude API to generate the article generateAIArticle(title, desc, dateStr, link); } catch(e) { el.innerHTML = `

Couldn't load latest video right now.

Watch on YouTube
`; } } async function generateAIArticle(title, desc, dateStr, videoLink) { const articleEl = document.getElementById('ai-article'); try { const prompt = `You are the editorial writer for American Discourse News — an independent news channel focused on financial accountability, supporting local communities, and putting American interests first. A new video was just published titled: "${title}" Video description: "${desc}" Write a short editorial article (3 tight paragraphs, no headers) that: 1. Summarizes what this video is about and why it matters to everyday Americans 2. Connects it to the broader mission of holding power accountable, supporting local banks/businesses, or voting for American interests 3. Ends with a compelling call to action — either to watch the video, find a local business, or use the voter guide Write in a sharp, confident, patriotic tone. No fluff. Sound like a real journalist, not an AI. Do not use the phrase "In conclusion". Do not use bullet points. 3 paragraphs max.`; const response = await fetch('https://api.anthropic.com/v1/messages', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'claude-sonnet-4-20250514', max_tokens: 1000, messages: [{ role: 'user', content: prompt }] }) }); const aiData = await response.json(); const text = aiData.content?.[0]?.text || ''; if (!text) throw new Error('No AI response'); const paragraphs = text.trim().split('\n\n').filter(p => p.trim()); articleEl.innerHTML = `
AI Editorial Summary
${title}
By American Discourse News AI  ·  ${dateStr}
${paragraphs.map(p => `

${p}

`).join('')} Watch the Full Video
`; } catch(e) { // Fallback if AI call fails — show the description instead articleEl.innerHTML = `
✦ Latest Video Summary
${title}

${desc.slice(0,400)}${desc.length > 400 ? '...' : ''}

Watch the Full Video
`; } } function playVideo(container, videoId) { container.innerHTML = ``; } // ── COMMUNITY FEED ──────────────────────────────────── const NEWS_API_KEY = 'cfdc156f3fa14db5a32c7713cde95a79'; const PLACES_API_KEY = 'AIzaSyBoV6jWki6Xrnz1FxOR5NxI1pqVVBxmELE'; const CIVIC_API_KEY = 'AIzaSyBoV6jWki6Xrnz1FxOR5NxI1pqVVBxmELE'; const FEED_PROXY = 'https://api.allorigins.win/get?url='; const savedFeedZip = localStorage.getItem('adn_zip'); if (savedFeedZip) { document.getElementById('home-zip').value = savedFeedZip; setTimeout(() => loadCommunityFeed(), 500); } function clearCommunityFeed() { document.getElementById('community-results').style.display = 'none'; document.getElementById('home-zip').value = ''; localStorage.removeItem('adn_zip'); } function useMyLocation() { const btn = document.getElementById('loc-btn'); btn.textContent = '📍 Locating...'; btn.disabled = true; if (!navigator.geolocation) { btn.textContent = '📍 Not supported'; btn.disabled = false; return; } navigator.geolocation.getCurrentPosition( async (pos) => { try { const { latitude: lat, longitude: lng } = pos.coords; const url = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${PLACES_API_KEY}`; const res = await fetch(FEED_PROXY + encodeURIComponent(url)); const data = await res.json(); const json = JSON.parse(data.contents); const zip = json.results?.[0]?.address_components?.find(c => c.types.includes('postal_code'))?.long_name; if (zip) { document.getElementById('home-zip').value = zip; loadCommunityFeed(); } } catch(e) {} btn.textContent = '📍 Use My Location'; btn.disabled = false; }, () => { btn.textContent = '📍 Location denied'; setTimeout(() => { btn.textContent = '📍 Use My Location'; btn.disabled = false; }, 2000); }, { timeout: 8000 } ); } async function loadCommunityFeed() { const zip = document.getElementById('home-zip').value.trim(); if (!zip || zip.length < 5) { document.getElementById('home-zip').style.borderColor = 'var(--rose-lt)'; setTimeout(() => document.getElementById('home-zip').style.borderColor = '', 1500); return; } localStorage.setItem('adn_zip', zip); document.getElementById('community-results').style.display = 'block'; document.getElementById('feed-location-name').textContent = 'Loading...'; document.getElementById('feed-full-link').href = `voteinformed.html?zip=${zip}`; getLocationName(zip); loadFeedNews(zip); loadFeedEvents(zip); loadFeedElections(zip); loadFeedBiz(zip); } async function getLocationName(zip) { try { const res = await fetch(FEED_PROXY + encodeURIComponent(`https://api.zippopotam.us/us/${zip}`)); const data = await res.json(); const info = JSON.parse(data.contents); const place = info.places?.[0]; if (place) { document.getElementById('feed-location-name').textContent = `${place['place name']}, ${place['state abbreviation']}`; document.getElementById('feed-location-script').textContent = `What's happening in`; } } catch(e) { document.getElementById('feed-location-name').textContent = `Zip ${zip}`; } } async function loadFeedNews(zip) { const el = document.getElementById('feed-news'); try { let city = zip; try { const gr = await fetch(FEED_PROXY + encodeURIComponent(`https://api.zippopotam.us/us/${zip}`)); const gd = await gr.json(); city = JSON.parse(gd.contents).places?.[0]?.['place name'] || zip; } catch(e) {} const newsUrl = `https://newsapi.org/v2/everything?q="${city}"&sortBy=publishedAt&pageSize=5&language=en&apiKey=${NEWS_API_KEY}`; const res = await fetch(FEED_PROXY + encodeURIComponent(newsUrl)); const data = await res.json(); const articles = JSON.parse(data.contents).articles?.filter(a => a.title && a.title !== '[Removed]').slice(0, 4) || []; if (!articles.length) throw new Error('No articles'); el.innerHTML = articles.map(a => `
${a.source?.name||'News'}
${a.title}
`).join('') + `More local news →`; } catch(e) { el.innerHTML = `
Find local news:
Google News Local → Patch.com Hyperlocal →`; } } async function loadFeedEvents(zip) { const el = document.getElementById('feed-events'); let city = zip, state = ''; try { const gr = await fetch(FEED_PROXY + encodeURIComponent(`https://api.zippopotam.us/us/${zip}`)); const gd = await gr.json(); const gj = JSON.parse(gd.contents); city = gj.places?.[0]?.['place name'] || zip; state = gj.places?.[0]?.['state abbreviation'] || ''; } catch(e) {} const citySlug = city.toLowerCase().replace(/\s+/g,'-').replace(/[^a-z0-9-]/g,''); const cityQuery = encodeURIComponent(`${city} ${state}`); el.innerHTML = `
Find what's happening in ${city}:
🎟️Eventbrite — Local Events 👥Meetup — Community Groups 📢Facebook — Local Events 🏛️City Council & Town Halls `; } async function loadFeedElections(zip) { const el = document.getElementById('feed-elections'); try { const url = `https://www.googleapis.com/civicinfo/v2/representatives?address=${encodeURIComponent(zip)}&key=${CIVIC_API_KEY}&levels=locality&levels=country&roles=legislatorLowerBody&roles=headOfGovernment`; const res = await fetch(FEED_PROXY + encodeURIComponent(url)); const data = await res.json(); const json = JSON.parse(data.contents); if (json.error) throw new Error(json.error.message); const offices = json.offices || [], officials = json.officials || []; const reps = []; offices.slice(0,4).forEach(o => o.officialIndices?.forEach(idx => { const off = officials[idx]; if(off) reps.push({office:o.name, name:off.name, party:off.party||'Unknown'}); })); if (!reps.length) throw new Error('No reps'); el.innerHTML = reps.slice(0,4).map(r => `
${r.office}
${r.name}
${r.party}
`).join('') + `Full voter guide + AI snapshots →`; } catch(e) { el.innerHTML = `
Research your local races:
Ballotpedia Ballot Lookup → Vote Informed Dashboard →`; } } async function loadFeedBiz(zip) { const el = document.getElementById('feed-biz'); try { const url = `https://maps.googleapis.com/maps/api/place/textsearch/json?query=${encodeURIComponent('local small business near '+zip)}&key=${PLACES_API_KEY}`; const res = await fetch(FEED_PROXY + encodeURIComponent(url)); const data = await res.json(); const places = JSON.parse(data.contents).results?.slice(0,4) || []; if (!places.length) throw new Error('No places'); el.innerHTML = places.map(p => `
${p.name[0]}
${p.name}
${p.rating?'★'.repeat(Math.round(p.rating))+' '+p.rating:''}
`).join('') + `Full local business finder →`; } catch(e) { el.innerHTML = `
Find local businesses:
Local Business Finder → Independent We Stand →`; } } buildEditorial(); loadArticles();